package rs.ac.uns.ftn.informatika.mbs2.e11031.etaksi.entitet;

import java.util.Collection;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

@SuppressWarnings("serial")
@Entity
@Table(name = "vozac")
@NamedQueries({
		@NamedQuery(name = "ukupnaCenaPruzenihUsluga", query = "select coalesce(sum(v.cena), 0) from Voznja v where v.vozac.id = :vozacId and v.odrediste is not null"),
		@NamedQuery(name = "vozaciZadateKategorije", query = "select distinct v from Vozac v inner join v.kategorijeDozvola kd where kd.naziv = :kategorija") })
public class Vozac extends Korisnik {

	@Transient
	private Double ukupnaCenaPruzenihUsluga;

	@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, optional = true)
	@JoinColumn(name = "vz_vo_id", referencedColumnName = "vo_id")
	private Vozilo vozilo;

	@ManyToMany(targetEntity = KategorijaDozvole.class, cascade = { CascadeType.ALL })
	@JoinTable(name = "vozac_i_kategorija_dozvole", joinColumns = @JoinColumn(name = "vkd_ko_id"), inverseJoinColumns = @JoinColumn(name = "vkd_kd_id"))
	private Collection<KategorijaDozvole> kategorijeDozvola;

	public Vozac() {
		super();
	}

	public Vozac(Long jmbg, String ime, String prezime, String korisnickoIme,
			String lozinka) {
		super(jmbg, ime, prezime, korisnickoIme, lozinka);
	}

	public Double getUkupnaCenaPruzenihUsluga() {
		return ukupnaCenaPruzenihUsluga;
	}

	public void setUkupnaCenaPruzenihUsluga(Double ukupnaCenaPruzenihUsluga) {
		this.ukupnaCenaPruzenihUsluga = ukupnaCenaPruzenihUsluga;
	}

	public Vozilo getVozilo() {
		return vozilo;
	}

	public void setVozilo(Vozilo vozilo) {
		this.vozilo = vozilo;
	}

	public Collection<KategorijaDozvole> getKategorijeDozvola() {
		return kategorijeDozvola;
	}

	public void setKategorijeDozvola(
			Collection<KategorijaDozvole> kategorijeDozvola) {
		this.kategorijeDozvola = kategorijeDozvola;
	}

}
